extends CharacterBody2D


const MAX_FORCE_STRENGTH = 200 #施加动力
const MAX_FLY_SPEED = 1000 # 最大飞行速度
const MAX_ROTATE_SPEED = 0.1 #弧度制最大转速

var selected = true # 选中状态的剑可以改剑灵指令，可以接收手动操控输入；未选中或无手动输入信号时自动执行剑灵指令
var sword_gravity = Vector2(0,10) # 刚体所受的重力
var sword_mass  = 0.001 # 质量



var target_pos=Vector2(-1,-1)

#func _ready() -> void:
	#sword_gravity = get_mass()*980# 初始化重力
	#sword_mass = get_mass() # 初始化质量
	## 设置转动惯量。需要延时，不能直接设置，不知道为啥
	#var i=INF
	#while(i==INF):
		#await get_tree().create_timer(0.01).timeout 
		#i=(PhysicsServer2D.body_get_direct_state(self.get_rid()).inverse_inertia)
	#set_inertia(1.0/i)
	#
	#print(sword_gravity)
	#print(sword_mass)
	#print(1.0/i)
	#print(get_inertia())

func _physics_process(delta: float) -> void:
	# 开始运动，到点就停
	if target_pos.x >= 0:
		var d = target_pos-position
		var d_length =d.length()
		if d_length >MAX_FLY_SPEED*delta:
			velocity = d.normalized()*MAX_FLY_SPEED
		else:
			velocity = d.normalized()*d_length/delta
	else:
		velocity+=sword_gravity
	move_and_slide()
		
## 轮盘动力驱动操作方式
#func _on_wheel_force_changed(force:Vector2):# 归一化的【0,1】，确定方向和大小
	#apply_central_force(force*MAX_FORCE_STRENGTH-sword_gravity) #施加动力并增加额外的力用来抵消重力

# 映射框位置驱动操作方式
func _on_map_box_position_changed(pos: Vector2) -> void:
	target_pos=pos
	
		
